using System;
using System.ComponentModel.DataAnnotations;
using JGSY.CMS.LowCode.Platform.Domain.Interfaces;

namespace JGSY.CMS.LowCode.Platform.Domain.Entities
{
    /// <summary>
    /// 工作流定义实体
    /// 用于存储工作流的步骤配置和条件规则，支持多租户隔离
    /// </summary>
    public class Workflow : ITenantEntity
    {
        /// <summary>
        /// 工作流标识符
        /// </summary>
        public long Id { get; set; }

        /// <summary>
        /// 租户ID
        /// 用于多租户数据隔离
        /// </summary>
        [Required]
        [StringLength(50)]
        public string TenantId { get; set; } = string.Empty;
        
        /// <summary>
        /// 工作流名称
        /// 工作流的显示名称
        /// </summary>
        public string Name { get; set; } = string.Empty;
        
        /// <summary>
        /// 工作流步骤
        /// 以JSON格式存储的工作流步骤定义
        /// </summary>
        public string Steps { get; set; } = string.Empty;
        
        /// <summary>
        /// 流转条件
        /// 以JSON格式存储的工作流条件规则
        /// </summary>
        public string Conditions { get; set; } = string.Empty;
        
    /// <summary>
    /// 工作流状态（0=草稿，1=启用，2=停用）
    /// </summary>
    public byte Status { get; set; } = 1;

    /// <summary>
    /// 执行次数
    /// </summary>
    public int ExecutionCount { get; set; } = 0;

        /// <summary>
        /// 创建者标识符
        /// 创建该工作流的用户ID
        /// </summary>
        public long CreatedBy { get; set; }
        
        /// <summary>
        /// 创建时间
        /// 工作流的创建时间戳
        /// </summary>
        public DateTime CreatedAt { get; set; }

    /// <summary>
    /// 修改时间
    /// </summary>
    public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;

    /// <summary>
    /// 当前版本号（用于快速显示），初始为 1
    /// </summary>
    public int CurrentVersion { get; set; } = 1;

    /// <summary>
    /// 并发控制标记（时间戳/行版本），用于处理并发更新
    /// </summary>
    public byte[]? RowVersion { get; set; }
    }
}
